package br.com.vti.sisp_sicrim.antigo.controller.tela;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.programa.FuncoesGerais;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.Sislct01;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe responsavel por encapsular o tratamento e as consistencias da tela Idcta002
 * 
 * @author Incode - Data: mai/2014
 * 
 */
public class Idcta002 {
	private boolean enviada = false;
	private String pagina = "/resources/antigo/jsp/Idcta002.jsp";
	private String versao;
	private String operacao;
	private int dataCorrente;
	private String horaCorrente;
	private long iRegger;
	private String iNomide;
	private long iPispas;
	private int iCodpro;
	private String iDescpro;
	private int iAltura;
	private String iSinpar;
	private int iCodcut;
	private int iCorolh;
	private int iCorcab;
	private int iTipcab;
	private int ddoc;
	private int mdoc;
	private int adoc;
	private int iMatfua;
	private String iObserv;
	private String iObserv1;
	private String iMicrof;
	private long ndemidAbn;
	private int iCodano;
	private String iRenaidw;
	private int iNumvia;
	private String chave;
	private String iCnumvia;
	private String empresa;
	private String nomeClasse;
	private String[][] dedos = new String[6][3];
	private String mensagem = "";
	private String funcao = "0";
	private String campofocus = "irenaid";
	private String navegar = "";
	private Boolean temMensagem = false;
	private Result result;
	private Sessao sessao;
	FuncoesGerais funcoes = new FuncoesGerais();
	// Classes views
	DidCadastro did = new DidCadastro();
	// Classes includes
	Sislct01 sislct01 = new Sislct01();

	public Idcta002() {
		inicializar(false);
	}

	public Idcta002(boolean primeiraVez, Sessao sessao) {
		this.sessao = sessao;
		inicializar(primeiraVez);
	}

	public void inicializar(boolean primeiraVez) {
		if (primeiraVez) {
			versao = "0";
			operacao = "";
			dataCorrente = 0;
			iRegger = 0;
			iNomide = "";
			iPispas = 0;
			iCodpro = 0;
			iDescpro = "";
			iAltura = 0;
			iSinpar = "";
			iCodcut = 0;
			iCorolh = 0;
			iCorcab = 0;
			iTipcab = 0;
			ddoc = 0;
			mdoc = 0;
			adoc = 0;
			iMatfua = 0;
			iObserv = "";
			iObserv1 = "";
			iMicrof = "";
			ndemidAbn = 0;
			iCodano = 0;
			iRenaidw = "";
			iNumvia = 0;
			chave = "";
			iCnumvia = "";
			dedos = new String[6][3];
			empresa = "";
			nomeClasse = "";
			empresa = sessao.getSisgsisp().getEmpresa();
			operacao = sessao.getSisgsisp().getOperacao();
			versao = sessao.getSisgsisp().getVersao();
		}
		horaCorrente = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()); // *TIMX
	}

	public boolean receberTela(boolean primeiraVez, Result result) throws Exception {
		// faz o tratamento das criticas necessarias para os dados da tela
		// recebida
		this.result = result;
		temMensagem = false;
		if (!primeiraVez) {
			return validar();
		} else {
			return true;
		}
	}

	public void enviarTela(boolean primeiraVez, Result result, String origem) {
		this.enviada = true;
		// rotina para enviar a tela
		// caso esteja setado valores para acoesFinais, executa as classes
		// correspondentes
		this.result = result;
		if (UtilBean.acoesFinais != null && !UtilBean.acoesFinais.isEmpty()) {
			UtilBean.processaAcao();
		} else {
			enviar(result, origem);
		}
	}

	public void enviar(Result result, String origem) {
		// redicionar para o jsp correspondente
		UtilBean.redireciona(pagina, result, origem);
	}

	public void enviarMensagem(String campo, String mensagem) {
		// formatar a mensagem de erro, posicionar no campo informa
		if (campo != null) {
			campofocus = campo;
		} else {
			campofocus = "";
		}
		this.mensagem = mensagem;
		temMensagem = true;
		// enviar(result, origem);
	}

	public boolean validar() throws Exception {
		// validar os campos recebidos da tela
		UtilBean.funcao = this.funcao;
		ValidarOperacao();
		if (temMensagem) {
			return false;
		}
		ValidarIPispas();
		if (temMensagem) {
			return false;
		}
		ValidarICodpro();
		if (temMensagem) {
			return false;
		}
		ValidarIDescpro();
		if (temMensagem) {
			return false;
		}
		ValidarIAltura();
		if (temMensagem) {
			return false;
		}
		ValidarICodcut();
		if (temMensagem) {
			return false;
		}
		ValidarICorolh();
		if (temMensagem) {
			return false;
		}
		ValidarICorcab();
		if (temMensagem) {
			return false;
		}
		ValidarITipcab();
		if (temMensagem) {
			return false;
		}
		ValidarAdoc();
		if (temMensagem) {
			return false;
		}
		ValidarNdemidAbn();
		if (temMensagem) {
			return false;
		}
		ValidarICodano();
		if (temMensagem) {
			return false;
		}
		ValidarIRenaidw();
		if (temMensagem) {
			return false;
		}
		ValidarINumvia();
		if (temMensagem) {
			return false;
		}
		ValidarICnumvia();
		if (temMensagem) {
			return false;
		}
		ValidarD01dedos();
		if (temMensagem) {
			return false;
		}

		sessao.getSisgsisp().setEmpresa(this.empresa);
		sessao.getSisgsisp().setOperacao(this.operacao);
		sessao.getSisgsisp().setVersao(this.versao);
		return true;
	} // Consist�ncia F00funcao
		// if (!( UtilBean.funcao.equals(UtilBean.ctt_processa) ||
		// UtilBean.funcao.equals(UtilBean.ctt_pf2) ||
		// UtilBean.funcao.equals(UtilBean.ctt_confirma) ||
		// UtilBean.funcao.equals(UtilBean.ctt_retorna) ||
		// UtilBean.funcao.equals(UtilBean.ctt_anterior)))
		// {
		// enviarMensagem(null, "");
		// return;
		// }
		// }

	private void ValidarOperacao() {
		// Consist�ncia F00OPERACAO
		if (!operacao.equals("AIC")) {
			funcoes.sissm001(result, sessao);
		}
	}

	private void ValidarIPispas() {
		// Consist�ncia F00I-PISPAS
		if (iPispas > 0 && iPispas < 100000) {
			enviarMensagem(null, "PIS/PASEP INVALIDO");
			return;
		}
	}

	private void ValidarICodpro() {
		// Consist�ncia F00I-CODPRO
		Sislct01 sislct01 = new Sislct01();
		// VOLTA DA PESQUISA
		if (!UtilBean.funcao.equals(UtilBean.ctt_pf2) && iCodpro == 0) {
			enviarMensagem(null, "O CODIGO DA PROFISSAO DEVE SER INFORMADO");
			return;
		}
		if (!UtilBean.funcao.equals(UtilBean.ctt_pf2) && iCodpro > 0) {
			sislct01.tt1 = 201;
			sislct01.cc1 = iCodpro;

			funcoes.sisnct01(sislct01.tt1, sislct01.cc1, sislct01.vt1);
			if (sislct01.vt1.equals("@")) {
				enviarMensagem(null, "");
				return;
			}
		}
	}

	private void ValidarIDescpro() {
		// Consist�ncia F00I-DESCPRO
		Sislct01 sislct01 = new Sislct01();
		// VOLTA DA PESQUISA
		if (!UtilBean.funcao.equals(UtilBean.ctt_pf2) && iDescpro.trim().equals("")) {
			sislct01.tt1 = 201;
			sislct01.cc1 = iCodpro;

			funcoes.sisnct01(sislct01.tt1, sislct01.cc1, sislct01.vt1);
			if (sislct01.vt1.equals("@")) {
				enviarMensagem(null, "");
				return;
			}
			iDescpro = sislct01.vt1;
		}
	}

	private void ValidarIAltura() {
		// Consist�ncia F00I-ALTURA
		if (!UtilBean.funcao.equals(UtilBean.ctt_pf2)) {
			if (iAltura < 020 || iAltura > 260) {
				enviarMensagem(null, "");
				return;
			}
		}
	}

	private void ValidarICodcut() {
		// Consist�ncia F00I-CODCUT
		Sislct01 sislct01 = new Sislct01();
		// VOLTA DA PESQUISA
		if (!UtilBean.funcao.equals(UtilBean.ctt_pf2)) {
			sislct01.tt1 = 203;
			sislct01.cc1 = iCodcut;

			funcoes.sisnct01(sislct01.tt1, sislct01.cc1, sislct01.vt1);
			if (sislct01.vt1.equals("@")) {
				enviarMensagem(null, "");
				return;
			}
		}
	}

	private void ValidarICorolh() {
		// Consist�ncia F00I-COROLH
		Sislct01 sislct01 = new Sislct01();
		// VOLTA DA PESQUISA
		if (!UtilBean.funcao.equals(UtilBean.ctt_pf2)) {
			sislct01.tt1 = 204;
			sislct01.cc1 = iCorolh;

			funcoes.sisnct01(sislct01.tt1, sislct01.cc1, sislct01.vt1);
			if (sislct01.vt1.equals("@")) {
				enviarMensagem(null, "");
				return;
			}
		}
	}

	private void ValidarICorcab() {
		// Consist�ncia F00I-CORCAB
		Sislct01 sislct01 = new Sislct01();
		// VOLTA DA PESQUISA
		if (!UtilBean.funcao.equals(UtilBean.ctt_pf2)) {
			if (iCorcab > 6) {
				enviarMensagem(null, "");
				return;
			}
			sislct01.tt1 = 205;
			sislct01.cc1 = iCorcab;
			if (sislct01.vt1.equals("@")) {
				enviarMensagem(null, "");
				return;
			}
		}
	}

	private void ValidarITipcab() {
		// Consist�ncia F00I-TIPCAB
		Sislct01 sislct01 = new Sislct01();
		// VOLTA DA PESQUISA
		if (!UtilBean.funcao.equals(UtilBean.ctt_pf2)) {
			sislct01.tt1 = 206;
			sislct01.cc1 = iTipcab;

			funcoes.sisnct01(sislct01.tt1, sislct01.cc1, sislct01.vt1);
			if (sislct01.vt1.equals("@")) {
				enviarMensagem(null, "");
				return;
			}
		}
	}

	private void ValidarAdoc() throws Exception {
		// Consist�ncia F00ADOC
		int dat1;
		if (!UtilBean.funcao.equals(UtilBean.ctt_pf2)) {
			dat1 = (adoc * 10000) + (mdoc * 100) + ddoc;
			if (!UtilBean.validarMascara(dat1, "yyyyMMdd")) {
				enviarMensagem("ddoc", "");
				return;
			}
			if (dat1 < 19920803) {
				enviarMensagem(null, "");
				return;
			}
			if (dat1 > UtilBean.obtemDataCorrente()) {
				enviarMensagem(null, "");
				return;
			}
		}
	}

	private void ValidarNdemidAbn() {
		// Consist�ncia F00NDEMID-ABN
	} // IF & = 0
		// REINPUT "Numero do Documento ou Tipografico invalido"
		// MARK *NDEMID-ABN ALARM

	private void ValidarICodano() {
		// Consist�ncia F00I-CODANO
		if (!UtilBean.funcao.equals(UtilBean.ctt_pf2)) {
			if (iCodano < 0 || iCodano > 9) {
				enviarMensagem(null, "COD. ANOMALIA INVALIDO");
				return;
			}
		}
	}

	private void ValidarIRenaidw() {
		// Consist�ncia F00I-RENAIDW
		if (iRenaidw.trim().equals("") && chave.equals("I")) {
			enviarMensagem("iRenaidw", "Renaid � campo obrigatorio");
			return;
		}
		if (chave.equals("I")) {
			did.consultaRenaid(iRenaidw);
			enviarMensagem("iRenaidw", "NUMERO DO RENAID JA EXISTE DIGITE OUTRO NUMERO");
			return;
		}
	}

	private void ValidarINumvia() {
		// Consist�ncia F00I-NUMVIA
		// Par�grafo: ler()
		while (did.pesquisaNumeroRg(getIregger())) {
			continue;
		}
		if (did.registrosProcessados() == 0) {
			if (iNumvia != 01) {
				enviarMensagem("iNumvia", "Numero da Via deve ser 1 - PRIMEIRO CADASTRO");
				return;
			}
			iNumvia = 01;
			did.setNumeroVia(01);
		}
		if (iNumvia == 01 || iNumvia == 02) {
			// continue;
		} else {
			enviarMensagem("iNumvia", "Numero da Via deve ser 1 ou 2");
			return;
		}
		if (iNumvia == 0) {
			enviarMensagem("iNumvia", "Numero da Via deve ser Informado");
			return;
		}
	}

	private void ValidarICnumvia() {
		// Consist�ncia F00I-CNUMVIA
		if (iCnumvia.trim().equals("")) {
			enviarMensagem("iCnumvia", "CONFIRME O N. DA VIA COM �S� OU �N�");
			return;
		} else {
			if (iCnumvia.equals("N")) {
				enviarMensagem("iNumvia", "ENTRE COM O NUMERO DA VIA");
				return;
			}
		}
	}

	private void ValidarD01dedos() {
		// Consist�ncia D01DEDOS
	}

	public String getVersao() {
		return versao;
	}

	public void setVersao(String versao) {
		this.versao = versao;
	}

	public String getOperacao() {
		return operacao;
	}

	public void setOperacao(String operacao) {
		this.operacao = operacao;
	}

	public int getDataCorrente() {
		return dataCorrente;
	}

	public void setDataCorrente(int dataCorrente) {
		this.dataCorrente = dataCorrente;
	}

	public long getIregger() {
		return iRegger;
	}

	public void setIregger(long iRegger) {
		this.iRegger = iRegger;
	}

	public String getInomide() {
		return iNomide;
	}

	public void setInomide(String iNomide) {
		this.iNomide = iNomide;
	}

	public long getIpispas() {
		return iPispas;
	}

	public void setIpispas(long iPispas) {
		this.iPispas = iPispas;
	}

	public int getIcodpro() {
		return iCodpro;
	}

	public void setIcodpro(int iCodpro) {
		this.iCodpro = iCodpro;
	}

	public String getIdescpro() {
		return iDescpro;
	}

	public void setIdescpro(String iDescpro) {
		this.iDescpro = iDescpro;
	}

	public int getIaltura() {
		return iAltura;
	}

	public void setIaltura(int iAltura) {
		this.iAltura = iAltura;
	}

	public String getIsinpar() {
		return iSinpar;
	}

	public void setIsinpar(String iSinpar) {
		this.iSinpar = iSinpar;
	}

	public int getIcodcut() {
		return iCodcut;
	}

	public void setIcodcut(int iCodcut) {
		this.iCodcut = iCodcut;
	}

	public int getIcorolh() {
		return iCorolh;
	}

	public void setIcorolh(int iCorolh) {
		this.iCorolh = iCorolh;
	}

	public int getIcorcab() {
		return iCorcab;
	}

	public void setIcorcab(int iCorcab) {
		this.iCorcab = iCorcab;
	}

	public int getItipcab() {
		return iTipcab;
	}

	public void setItipcab(int iTipcab) {
		this.iTipcab = iTipcab;
	}

	public int getDdoc() {
		return ddoc;
	}

	public void setDdoc(int ddoc) {
		this.ddoc = ddoc;
	}

	public int getMdoc() {
		return mdoc;
	}

	public void setMdoc(int mdoc) {
		this.mdoc = mdoc;
	}

	public int getAdoc() {
		return adoc;
	}

	public void setAdoc(int adoc) {
		this.adoc = adoc;
	}

	public int getImatfua() {
		return iMatfua;
	}

	public void setImatfua(int iMatfua) {
		this.iMatfua = iMatfua;
	}

	public String getIobserv() {
		return iObserv;
	}

	public void setIobserv(String iObserv) {
		this.iObserv = iObserv;
	}

	public String getIobserv1() {
		return iObserv1;
	}

	public void setIobserv1(String iObserv1) {
		this.iObserv1 = iObserv1;
	}

	public String getImicrof() {
		return iMicrof;
	}

	public void setImicrof(String iMicrof) {
		this.iMicrof = iMicrof;
	}

	public long getNdemidabn() {
		return ndemidAbn;
	}

	public void setNdemidabn(long ndemidAbn) {
		this.ndemidAbn = ndemidAbn;
	}

	public int getIcodano() {
		return iCodano;
	}

	public void setIcodano(int iCodano) {
		this.iCodano = iCodano;
	}

	public String getIrenaidw() {
		return iRenaidw;
	}

	public void setIrenaidw(String iRenaidw) {
		this.iRenaidw = iRenaidw;
	}

	public int getInumvia() {
		return iNumvia;
	}

	public void setInumvia(int iNumvia) {
		this.iNumvia = iNumvia;
	}

	public String getChave() {
		return chave;
	}

	public void setChave(String chave) {
		this.chave = chave;
	}

	public String getIcnumvia() {
		return iCnumvia;
	}

	public void setIcnumvia(String iCnumvia) {
		this.iCnumvia = iCnumvia;
	}

	public String getEmpresa() {
		return empresa;
	}

	public void setEmpresa(String empresa) {
		this.empresa = empresa;
	}

	public String getNomeClasse() {
		return nomeClasse;
	}

	public void setNomeClasse(String nomeClasse) {
		this.nomeClasse = nomeClasse;
	}

	public String[][] getDedos() {
		return dedos;
	}

	public void setDedos(String[][] dedos) {
		this.dedos = dedos;
	}

	public String getDedos(int index1, int index2) {
		return dedos[index1][index2];
	}

	public void setDedos(int index1, int index2, String dedos) {
		this.dedos[index1][index2] = dedos;
	}

	public String getHoraCorrente() {
		return horaCorrente;
	}

	public void setHoraCorrente(String horaCorrente) {
		this.horaCorrente = horaCorrente;
	}

	public String getFuncao() {
		return funcao;
	}

	public void setFuncao(String funcao) {
		this.funcao = funcao;
	}

	public String getCampofocus() {
		return campofocus;
	}

	public void setCampofocus(String campofocus) {
		this.campofocus = campofocus;
	}

	public String getNavegar() {
		return navegar;
	}

	public void setNavegar(String navegar) {
		this.navegar = navegar;
	}

	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public void setMensagemSaida(String mensagem) {
		this.mensagem = mensagem;
	}

	public boolean getEnviada() {
		return this.enviada;
	}

	public void setSessao(Sessao sessao) {
		this.sessao = sessao;
	}
}
